package com.zp.qualitypractice.activity;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.TextView;

import com.qiniu.android.storage.Configuration;
import com.qiniu.android.storage.UploadManager;
import com.zp.qualitypractice.R;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import butterknife.BindView;
import butterknife.ButterKnife;

/**
 * @author izp on 2017/10/24.
 */

public class TestRecursionUploadZipToQiniuActivity extends AppCompatActivity {
    @BindView(R.id.tv_result)
    TextView tvResult;
    @BindView(R.id.btn_action)
    Button btnAction;
    private UploadManager mUploadManager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        ButterKnife.bind(this);

    }

    /**
     * 质量压缩法

     *
     * @param image 传入图片bitmap
     * 1、创建字节数组输出流
     * 2、调用bitmap自带的压缩方法，把压缩后的数据传给字节数组输出流
     * 3、字节数组长度大于100K则压缩之，每次压缩后质量降低10，如果压缩后的长度小于100K就进行下面，如果大于继续压缩，
     *              压缩10的时候调出循环。（这个效率有点低啊）
     * 4、获取字节数组。
     * @return
     */
    public byte[] compressImage(Bitmap image) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        //质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中
        int options = 100;
        while (baos.toByteArray().length / 1024 > 250) {
            //循环判断如果压缩后图片是否大于100kb,大于继续压缩
            baos.reset();
            //重置baos即清空baos
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);
            //这里压缩options%，把压缩后的数据存放到baos中
            options -= 10;//每次都减少10
            if (options <= 10) {
                break;
            }
        }
        byte[] byteArray = baos.toByteArray();
        try {
            if (baos != null) {
                baos.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return byteArray;
    }
    /**
     * 递归上传图片主要方法
     * @param picUrl  图片的本地路径
     * @param picSize 上传图片总数量
     *                //picNum是计数器，用于计算已上传图片的数目
     *                //snplMomentAddPhotos.getData().get(picNum)是选择图片的开源库，返回一个ArrayList<String>类型的图片路径
     *                BitmapUnit.getInstance().compressImage(BitmapUnit.getInstance().getBItmap(picUrl))//压缩图片
     *
     */
    private void upPic(String picUrl, int picSize) {
        //根据七牛上传图片的api，封装的上传方法
//        QiniuUtils.getInstance().uploadSmallFile(BitmapUnit.getInstance().
//                        compressImage(BitmapUnit.getInstance().getBItmap(picUrl)),
//                url -> {
//                    //图片成功上传到七牛时回调
//                    //当前完成上传的图片数量小于总图片数量的时候重新调用该方法递归
//                    if (picNum < picSize) {
////                        这个picNum也要做成成员变量
//                        upPic(snplMomentAddPhotos.getData().get(picNum), picSize);
//                        Contants.upPicStatus = 1;
//                        if (loadingDialog != null) {
//                            loadingDialog.loadingStatus((picNum + 1) + "/" + picSize + "张图片");
//                        }
//                        //拼接字符串
//                        if (TextUtils.isEmpty(picUrls)) {
//                            picUrls = url;
//                        } else {
//                            picUrls = picUrls + "," + url;
//                        }
//                    }else {
//                        //结束递归
//                        if (loadingDialog != null) {
//                            loadingDialog.dismiss();
//                        }
//                        Contants.upPicStatus = 200;
//                        WorkManger.getInstance().publishWOrk("1", mClassTimetablesId,
//                                tvTitle.getText().toString(), etName.getText().toString(), picUrls, mCourseId);
//                    }
//                    picNum++;//添加计数器，这个要放到最后，不然会数组角标溢出
//                });
    }

    private void initPicUpload(){
//        String dirPath =AppContext.gApp.getCacheDir().getPath();
////        String dirPath = "<断点记录文件保存的文件夹位置>";
//                Recorder recorder = null;
//        try {
//            recorder = new FileRecorder(dirPath);
//        }catch (Exception e){
//
//        }
//    //默认使用key的url_safe_base64编码字符串作为断点记录文件的文件名
//    //避免记录文件冲突（特别是key指定为null时），也可自定义文件名(下方为默认实现)：
//        KeyGenerator keyGen = new KeyGenerator(){
//            public String gen(String key, File file){
//                // 不必使用url_safe_base64转换，uploadManager内部会处理
//                // 该返回值可替换为基于key、文件内容、上下文的其它信息生成的文件名
//                return key + "_._" + new StringBuffer(file.getAbsolutePath()).reverse();
//            }
//        };
//        Configuration config = new Configuration.Builder()
//                .chunkSize(256 * 1024)  //分片上传时，每片的大小。 默认256K
//                .putThreshhold(512 * 1024)  // 启用分片上传阀值。默认512K
//                .connectTimeout(10) // 链接超时。默认10秒
//                .responseTimeout(60) // 服务器响应超时。默认60秒
//                .recorder(recorder)  // recorder分片上传时，已上传片记录器。默认null
//                .recorder(recorder, keyGen)  // keyGen 分片上传时，生成标识符，用于片记录器区分是那个文件的上传记录
//                .zone(Zone.zone0) // 设置区域，指定不同区域的上传域名、备用域名、备用IP。
//                .build();
        Configuration configuration = new Configuration.Builder().build();
        // 重用uploadManager。一般地，只需要创建一个uploadManager对象
        mUploadManager = new UploadManager(configuration);
    }
}
